package com.xiangjiayi.study.controller;

import com.xiangjiayi.study.utils.DateTimeTools;
import jakarta.annotation.Resource;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.prompt.ChatOptions;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.model.tool.ToolCallingChatOptions;
import org.springframework.ai.support.ToolCallbacks;
import org.springframework.ai.tool.ToolCallback;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ToolCallingController {
    @Resource
    private ChatModel chatModel;

    @GetMapping("/toolcall/chat")
    public String chat(@RequestParam(name="msg",defaultValue = "你是谁，现在几点了？")String msg){
//        1.将工具注册到工具集
        ToolCallback[] tools = ToolCallbacks.from(new DateTimeTools());
//        2.配置大模型的聊天参数，通过建造者模式 (builder()) 设置工具回调数组
        ChatOptions options = ToolCallingChatOptions.builder()
                .toolCallbacks(tools)
                .build();
//        3.构建提示词，提示词包含msg前端传入的用户消息、options前面配置的聊天参数（含工具信息）
//        这个 Prompt 对象会作为完整的输入传递给大模型
        Prompt prompt = new Prompt(msg,options);

//        4.调用大模型，处理提示词
        return chatModel.call(prompt).getResult().getOutput().getText();
    }
}
